import numpy as np

'''
创建
'''
np_float = np.array([1, 2, 3, 4], dtype="float")
data = np.array([[1, 2, 3], [4, 5, 6]])
# 1-10步长0.5
np.arange(1, 10, 0.5)
# 1-10 15个元素
np_split = np.linspace(1, 10, 15)
# 最后一个不取
np_linspace = np.linspace(1, 10, 15, endpoint=False)
# 等比数列(开始的数是2^1，结束的数字是2^5,一共是个数字)
np_logspace = np.logspace(1, 5, base=2, num=10)

# 特殊的数组
zero_np = np.zeros([3, 3])
ones_np = np.ones([2, 2])
# 对角线元素为1，其他为0
np.eye(6)
# 对角线是1、2、3、4其他元素为0
diag_np = np.diag([1, 2, 3, 4])

'''
删除
'''
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 删除单个
np.delete(a, 5)

# 删除一列
np.delete(a, 1, axis=1)

# 删除一行
np.delete(a, 1, axis=0)

# 删除多个
np.delete(a, np.s_[3:6])

'''
去重
'''
a = np.array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])

# 去重
np.unique(a)

# 去重，并且返回每个元素的索引
np.unique(a, return_index=True)

# 去重，并且返回每个元素的个数
np.unique(a, return_counts=True)

'''
拼接
'''
# 拼接一维的
np.char.add(['hello'], ['world'])

# 拼接多维的,按照顺序依次拼接
np.char.add(['hello', 'hi'], ['zs', 'ls'])

# 重复生成，生成十次
np.char.multiply("Hello", 10)

# 字符串居中的操作,前后是空格
np.char.center('nihao', 30)

# 字符串的分割操作,变成了一个list
np.char.split("www.bai.com", ".")

# 换行分割，按照换行符来进行分割
np.char.splitlines("i\nlove\nyou")

# 去除开头和结尾的空格
np.char.strip("     l  a  o    ")

# 拼接字符串 --->   l/a/o/c/h/e/n
np.char.join("/", "laochen")

# 替换,第一个参数需要替换的字符串，第二个参数原字符串，第三个参数，替换后的字符串
np.char.replace("lao cheng", "cheng", "gao")

'''
追加和插入
'''

a = np.array([[1, 2, 3], [4, 5, 6]])

# 二维追加一维会变成一维
np.append(a, [7, 8, 9])

# 追加二维的行，还是二维
np.append(a, [[7, 8, 9]], axis=0)

# 追加列
np.append(a, [[7, 8], [8, 9]], axis=1)

'''
插入
'''
a = np.array([[1, 2], [3, 4], [5, 6]])

# 在下标为3的地方追加一个一维，最后结果是一维
np.insert(a, 3, [7, 8])

# 在索引为1的行处插入
np.insert(a, 1, [[8, 9]], axis=0)

# 二维插入 插入列 会将每一个自动扩张成对应的行数
np.insert(a, 1, [[1], [2], [3]], axis=1)

'''
合并
'''

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 垂直合并  上下合并
np.vstack((a, b))

# 水平合并  左右合并
np.hstack((a, b))

'''
分割
'''

c = np.arange(12).reshape(3, 4)

# 垂直分割 分割成俩分
np.split(c, 2, axis=1)

# 水平分割 分成三份
np.split(c, 3, axis=0)

# 不等量分割
np.array_split(c, 2, axis=0)

# 垂直分割
np.hsplit(c, 2)

# 水平分割
np.vsplit(c, 3)
